package utils

import (
	"strconv"

	"github.com/gin-gonic/gin"
)

// Response represents a standardized API response structure.
// swagger:model Response
type Response struct {
	Code int    `json:"code"` // HTTP status code
	Msg  string `json:"msg"`  // Response message
	// Data holds the response payload.
	// It can be any valid JSON type, including objects, arrays, strings, numbers, booleans, or null.
	// swagger:ignore
	Data interface{} `json:"data"`
}

type ResponseV2 struct {
	Code string      `json:"code"`
	Data interface{} `json:"data"`
	Msg  string      `json:"msg"`
}

// ResponseSuccess 返回成功响应
func ResponseSuccess(c *gin.Context, data interface{}) {
	c.JSON(200, ResponseV2{
		Code: "200",
		Msg:  "获取成功",
		Data: data,
	})
}

// ResponseError 返回错误响应
func ResponseError(c *gin.Context, code int, msg string) {
	// 根据错误类型设置HTTP状态码
	c.JSON(200, ResponseV2{
		Code: strconv.Itoa(code),
		Msg:  msg,
	})
}

// ResponseErrorMsg 返回错误响应，使用预定义的错误信息
func ResponseErrorMsg(c *gin.Context, msg string) {
	ResponseError(c, 1, msg)
}

// ResponseSystemError 返回系统错误响应
func ResponseSystemError(c *gin.Context) {
	ResponseError(c, 500, "系统内部错误")
}

// ResponseParamError 返回参数错误响应
func ResponseParamError(c *gin.Context) {
	ResponseError(c, 400, "请求参数错误")
}

// ResponseAuthError 返回认证错误响应
func ResponseAuthError(c *gin.Context) {
	ResponseError(c, 401, "身份认证失败")
}

// ResponsePermissionError 返回权限错误响应
func ResponsePermissionError(c *gin.Context) {
	ResponseError(c, 403, "权限不足")
}

// 插入數據失敗提示
func InsertError(c *gin.Context) {
	c.JSON(
		200,
		gin.H{
			"code": 500,
			"msg":  "插入數據失敗",
		},
	)
}

//参数错误统一提示
func PrarmError(c *gin.Context) {
	c.JSON(
		200,
		gin.H{
			"code": "500",
			"msg":  "參數錯誤",
		},
	)
}
